// let关键字就是用来声明变量的，使用let关键字声明的变量具有块级作用

if (true) {
  let a = 10;
  console.log('我是if内的块级作用域', a);
}
// console.log('我是if外的块级作用域', a); // ReferenceError: a is not defined

// 注1：在一个大括号中使用let关键字声明的变量才具有块级作用域，var不具备此特效
if (true) {
  let num1 = 100;
  var num2 = 200;
}
// console.log("let声明", num1); // ReferenceError: num1 is not defined
console.log("var声明", num2); // 200 全局变量


// 注2：let关键字可以防止循环变量变成全局变量
//  旧
for (var i = 0; i < 2; i++) {
}
console.log("var循环 i", i); // 2
//  新
// for (let j = 0; j < 2; j++) {
// }
// console.log("let循环 j", j); // ReferenceError: j is not defined


// 注3: let关键字声明的变量没有变量提升
//  旧
console.log("var变量提升", a1); // undefined        
//  变量提升: js在文件作用域下会先将所有使用var声明的变量提升至顶部，但是不会赋值。
var a1 = "ok";
//  新
console.log("let变量提升", a2); // ReferenceError: Cannot access 'a2' before initialization
let a2 = "ok";


